Next.js template
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

[dataId].js 1.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import DataDetailsCard from '../../components/cards/data-details-card/DataDetailsCard';
  2. import { getDataIds } from '../../requests/dataIdsRequest';
  3. import { getSingleData } from '../../requests/singleDataRequest';
  4. const SignelDataPage = (props) => {
  5. const data = props.selectedData;
  6. if (!data) {
  7. return <h1>{props.message}</h1>;
  8. }
  9. return <DataDetailsCard data={data.singleData} />;
  10. };
  11. export async function getStaticProps(context) {
  12. const dataId = context.params.dataId;
  13. try {
  14. const data = await getSingleData(dataId);
  15. return {
  16. props: {
  17. selectedData: data,
  18. },
  19. revalidate: 60,
  20. };
  21. } catch (error) {
  22. return {
  23. props: {
  24. selectedData: null,
  25. message: error.message,
  26. },
  27. revalidate: 60,
  28. };
  29. }
  30. }
  31. export async function getStaticPaths() {
  32. try {
  33. const firstPageDataIds = await getDataIds();
  34. const paths = firstPageDataIds.dataIds.map((id) => ({
  35. params: { dataId: id },
  36. }));
  37. return {
  38. paths: paths,
  39. fallback: 'blocking',
  40. };
  41. } catch (error) {
  42. return {
  43. paths: [],
  44. fallback: 'blocking',
  45. };
  46. }
  47. }
  48. export default SignelDataPage;